#pragma once
#include <cmath>
#include <queue>
#include <stack>
#include <vector>

#include "ListNode.h"
ListNode *reverseList(ListNode *head);
ListNode *reverseListRec(ListNode *head);
int linkLength(ListNode *head);
std::vector<int> travelList(ListNode *head);
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2);
ListNode *mergeTwoListsRec(ListNode *l1, ListNode *l2);
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB);
bool hasCycle(ListNode *head);
ListNode *getKthFromEnd(ListNode *head, int k);
ListNode *deleteDuplicates(ListNode *head);
bool isPalindrome(ListNode *head);
ListNode *removeNthFromEnd(ListNode *head, int n);
ListNode *reverseBetween(ListNode *head, int m, int n);
ListNode *rotateRight(ListNode *head, int k);
ListNode *entryNodeOfLoop(ListNode *pHead);
ListNode *sortList(ListNode *head);
std::vector<int> printNumbers(int n);
ListNode *mergeKLists1(std::vector<ListNode *> &lists);
